package com.ocean.everyday.d001_countnicepairsinanarray;

import java.util.HashMap;
import java.util.Map;

/**
 * <Description> <br>
 * https://leetcode.cn/problems/count-nice-pairs-in-an-array/
 * <p>
 * 输入：nums = [42,11,1,97]
 * 输出：2
 * 解释：两个坐标对为：
 * - (0,3)：42 + rev(97) = 42 + 79 = 121, 97 + rev(42) = 97 + 24 = 121 。
 * - (1,2)：11 + rev(1) = 11 + 1 = 12, 1 + rev(11) = 1 + 11 = 12 。
 * <p>
 * 输入：nums = [13,10,35,24,76]
 * 输出：4
 *
 * @author linmiaolai@sanyygp.com<br>
 * @version 1.0<br>
 * @date 2023/01/17 <br>
 */
public class CountNicePairsInAnArray {
    public static void main(String[] args) {
        CountNicePairsInAnArray countNicePairsInAnArray = new CountNicePairsInAnArray();
        int[] nums = {42, 11, 1, 97};
        int res = countNicePairsInAnArray.countNicePairs(nums);
        System.out.println(res);
        int[] nums2 = {13, 10, 35, 24, 76};
        res = countNicePairsInAnArray.countNicePairs(nums2);
        System.out.println(res);
    }


    /**
     * 寻找好下标对
     * nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
     * f(i) = nums[i] -rev(num[i])
     * f(j) = nums[j] -rev(num[j])
     * 如果
     * f(i) = f(j) -> 那么下标i满足 好下标对
     * 记下 f(i) key:为f(i)计算的值 value为 累计的key相同的次数
     *
     * @param nums
     * @return
     */
    public int countNicePairs(int[] nums) {
        final int MOD = 1000000007;
        int res = 0;
        Map<Integer, Integer> h = new HashMap<Integer, Integer>();
        for (int i : nums) {
            int temp = i, j = 0;
            while (temp > 0) {
                j = j * 10 + temp % 10;
                temp /= 10;
            }
            // 这里先统计次数 再把它加到hash表中 如果是第一次 统计肯定是0 如果不是第一次  下面行代码已经累计了
            res = (res + h.getOrDefault(i - j, 0)) % MOD;
            h.put(i - j, h.getOrDefault(i - j, 0) + 1);
        }
        return res;
    }

}
